package algo._05_array;

/**
 * @author: hu.shengjin
 * @date: 2019/12/5
 * @description: 数组
 */
public class MyArray {
    /**定义整形数据data保存数据*/
    public int[] data;
    /**定义数组长度*/
    private int n;
    /**定义中实际的个数*/
    private int count;
    /**构造方法，定义数组大小*/
    public MyArray(int capacity) {
        this.data = new int[capacity];
        this.n = capacity;
        //一开始一个数据都没有所以存0
        this.count = 0;
    }
    /**根据索引，找到数据中的元素并返回*/
    public int find(int index) {
        if (index < 0 || index >= count) return -1;
        return data[index];
    }
    /**插入元素*/
    public boolean insert(int index, int value) {
        //数组空间已满
        if (count == n) return false;
        //如果还没满，那就可以插入
        //位置不合法
        if (index < 0 || index > count) return false;
        //位置合法
        for (int i = count; i > index; --i) {
            data[i] = data[i -1];
        }
        data[index] = value;
        ++count;
        return true;
    }
    /**根据索引删除数组中的元素*/
    public boolean delete(int index) {
        if (index < 0 || index >= count) throw new IndexOutOfBoundsException();
        //从删除的位置，将后面的元素向前移一位
        for (int i = index + 1; i < count; ++i) {
            data[i - 1] = data[i];
        }
        --count;
        return true;
    }
    public void printAll() {
        for (int i = 0; i < count; i++) {
            System.out.print(data[i] + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        MyArray myArray = new MyArray(5);
        myArray.printAll();
        myArray.insert(0, 2);
        myArray.insert(0, 3);
        myArray.insert(1, 5);
        myArray.insert(3, 9);
        myArray.insert(3, 10);
        myArray.printAll();
        System.out.println(myArray.find(3));
    }

}
